package com.yingside.system.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yingside.system.model.User;
import com.baomidou.mybatisplus.extension.service.IService;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Set;

/**
 * <p>
 * 用户表 服务类
 * </p>
 *
 * @author yingside
 * @since 2020-12-30
 */
public interface IUserService extends IService<User> {
    /**
     * 根据用户名获取用户对象信息
     * @param username  登录用户名
     * @return          用户对象信息
     */
    User selectUserByUsername(String username);

    /**
     * 根据页面查询条件，分页显示用户信息，查询条件为空则查询所有
     * @param page 当前页码
     * @param limit 每页显示数量
     * @param userQuery 页面传入的查询对象
     * @return          分页的用户数据
     */
    IPage<User> selectAllWithDept(Integer page, Integer limit, User userQuery);

    /**
     * 根据用户名获取拥有的所有角色名
     * @param username  登录用户名
     * @return          该用户拥有的所有角色名
     */
    Set<String> selectRoleNameByUserName(@Param("username") String username);

    /**
     * 获取用户拥有的所有菜单权限和操作权限.
     * @param username      用户名
     * @return              权限标识符号列表
     */
    Set<String> selectPermsByUsername(String username);

    /**
     * 获取用户所拥有的操作权限
     * @param username 登录用户名
     * @return         该用户拥有操作权限的Set集合
     */
    Set<String> selectOperatorPermsByUserName(String username);
}
